计算机图形学期末重点

重点记录:

  1. 计算机图形学的最高奖项和顶会 ————图灵奖,Conference on Computer Graphics and Interactive Techniques,简称SIGGRAPH
  2. 单边结构,法向量计算
  3. 拓宽面结构,计算每个顶点法向量,计算角度
  4. 点云:如何计算法向量、去噪
  5. 网格:基本处理——三边结构计算法向量、包括简化(删除一条边,合并几个面)、细分操作(例如根号3插值)
  6. 变形:拉普拉斯、bulabula,保持了细节,重点是那个矩阵;不会考Nerf
  7. 光线跟踪,掌握伪代码。光追加速
  8. 计算阴影的方法,一个快一个准,注意辨别
  9. 纹理合成、柏林噪音(重点)
  10. 动画:最后一节课PPT内容

复习总结

Chap13 动画

  • 人脸动画:
    • 三维人脸重建:从二维到三维
      • 表情捕捉重建(传统:
        • 多目相机直接拍
        • Marker标记(常见
        • 深度传感器(Kinnet
        • RGB视频流
      • 用模型来重建
        • 3DMM:说白了就是给定一个高质量的三维的人脸数据库,然后训练出一个2D->3D的模型,之后输入一个2D人脸,就通过模型输出3D。其中有S和T两种向量
        • multi-linear models:多一个参数,将人脸数据SVD,分为三个参数
        • 非线性:引入深度学习
  • 图像变形:
    • 直接变形:无非就是从S到D做一个插值就完事,很直接
    • 基于特征的图像变形:先找到特征点,对特征进行插值
    • BN算法:说白了就是训练一个数据库,包含对应的关键向量,然后插值这些向量。且向量上的点在转换后,到两端点的比例还是保持不变,这是他的关键
  • 形状混合:
    • 顶点插值法:主要问题在于不自然,且极端情况下会带来错误结果
    • 几何内在参数法:先算边和角,再计算定点位置
  • 弹簧模型:
    • 在布料模拟中有应用,很聪明的想法

Chap12 纹理和阴影

  • 阴影
    1. 阴影是构建立体感的重要因素,且分为本影和半影;可以帮助认识接受者和遮挡物的几何形状
    2. 阴影可以分为附着阴影(背朝太阳)、投射阴影(脸朝太阳)、自阴影(自己产生);
    3. 硬阴影VS软阴影:所谓硬就是点光源产生的阴影结果,每个点只有在或者不在阴影中两个值;软则是由面光源产生
    4. 平面阴影:计算较简单,可以直接套矩阵计算
    5. 曲面阴影:可以通过阴影纹理:阴影纹理是一种生成曲面阴影的方法,通过从光源的视点绘制场景,并将深度值存储在一个纹理中。然后,这个纹理被用作投影纹理来判断一个点是否在阴影中。
    6. 阴影的绘制算法
      • 阴影域(准确,但是慢):非常简单但是又很聪明的方法:人眼不是接受光线,而是发出光线;然后计算从视点到一个像素点的射线经历了几次阴影域,进入+1,退出-1,最后判断是否大于0即可。PPT上的讲解不够仔细,可以通过这个链接进一步了解:
        • 阴影图算法(不准确,但是很快):简单来讲是指先存好一张Map,里面包含了光源到物体表面的深度信息,然后判断某个点是否在阴影中,就对比该点到光源的距离是否大于 深度图中存的值。
  • 纹理映射:
    1. 纹理的概念:用来表示物体表面细节的图像,增强真实感
    2. 纹理使用三步:采集+贴图+滤波
    3. 柏林噪音:使用不同频率和振幅的相干噪音函数来创建自然的图案,可以用来生成大理石、木头、云等纹理。
    4. 纹理合成:基于点/块的拓展
    5. 纹理滤波:主要还是精度不够,带来的摩尔纹、锯齿问题等等,需要滤波去除。主要方式包括:点采样,双线性插值、双三次插值、MipMap(预先处理好大小不同的纹理素材,用的时候选合适大小就行)、各向异性过滤(现在游戏很常见了)

Chap 9 光线跟踪(Nerf不会考,跳过)

  1. 光追的概念:由于计算机只能模拟光线,而不能百分百还原现实世界的光线路径,于是有光线追踪技术来模拟
  2. 光线投射算法:①从视点发射光线,找到交点;②计算离视点最近的交点;③根据光照模型赋值亮度。缺点 :不包含阴影、反射、折射的效果,光线只走一次
  3. 光线跟踪算法(脱胎于光线投射):
    1. 首先,计算光线与场景中物体最近的交点
    2. 在物体交点处计算反射、折射所产生的新的光线的方向
    3. 对新的光线继续追踪(递归过程)
    4. 光线与各种形状物体相交计算
    5. 使用的Trick:计算半透明物体阴影时,直接将光的颜色乘上遮挡物的透明因子,而忽略光的折射

Chap 8 网格的光顺、简化、细分与检索

  1. 网格的光滑:目的是为了去除噪点
    1. 拉普拉斯曲线光滑:每个点向左右邻居的均值靠拢。简单理解就是收缩,不断地互相靠拢,达到平滑的效果。至于PPT中的这句话:二阶导数的有限差分离散化 =一维拉普拉斯算子, 可以做如下解释:
      • 拉普拉斯算子定义:若在传统欧式空间,则是一阶导数的散度,即对F在每个坐标轴上的二阶偏导的求和;若在曲面上,则是对曲面M的梯度的散度,是对F在M上沿着任意方向的二阶方向导数求平均
      • 有限差分离散化:即对离散的点,用他们的值来近似代替二阶导数,拉普拉斯算子也坍缩到一维,变成取两边的点的值的均值。
  2. 网格的简化:目的是简化掉多余的网格,提高性能。主要有以下四种方式:
    1. 采样:很low的方法,不用
    2. 自适应细分:即找规律,找到一个可以递归细分的基底网格来近似
    3. 去除:常用,迭代地去除网格上的顶点或面片,并通过三角化填补孔洞
    4. 顶点合并:将多个顶点合并成一个顶点,用的边坍缩算法,将共边的顶点合并起来
  3. 网格的细分:与简化相反。通常有两种算法
    1. Loop细分:第一个细分方法,较简单,每个边加一个顶点,一个三角形就变成4个小三角了,进行n步,一个三角面就变成了4n个三角面。至于顶点升级、选取的公式,了解即可
    2. 根三细分:不同于Loop在边上创建新的顶点,他在三角形中间创建顶点即重心位置,一个三角变三个三角。注意步骤:①找重心;②收缩顶点;③公共边去掉,改为连接两个重心点
  4. 网格模型的简化:基本有三种算法
    1. 顶点删除,简单直接
    2. 边压缩,删一条边,用到这条边的三角全部消失
    3. 面片收缩:一个三角消失,带走相邻的三个三角